package com.fth.learn.chapter07;

/**
 * 常用方法
 * YiMi
 *
 * @author YiMi
 * @version 1.0
 * @date 2023/7/17 13:29
 */


/**
 * 常用方法
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/7/17 下午1:28
 */
public class String02 {

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";

        String s3 = new String("abc");
        String s4 = new String("abc");

        String s5 = "a" + "b" + "c";

        String s = "c";//用的是s5的
        //s没产生新的c 用的s5产生的c？ 所以s6！=s5？
        //为什么s6不等于s5？


        //jdk1.8 开始  new StringBuilder("ab").append(s);
        String s6 = "ab" + s;//产生一个ab，产生一个c，产生一个abc  s6new了一下s5没new s6存在于堆里，s5存在与非堆里
        //没产生c？


        String s7 = s6.intern();//intern()  表示统一地址，将s6的地址也放入常量池中
        String s8 = s6.intern();

        int[] as = {1, 2, 3};
        int[] as1 = {1, 2, 3};
        //基本表示判断値是否相同， 引用是否为同一段地址
        System.out.println(as == as1);//false
        // false  任何一个java全有equals方法   全是object （个例）
        System.out.println(as.equals(as1));//false

        // true 表示s1 与  s2地址相同
        System.out.println("------><-------");
        //常量值里的字符只有一个，如果有abc那么不会再产生新的abc
        System.out.println(s1 == s2);//true   地址相等，看的是储存常量值，==比较的是地址
        System.out.println(s3 == s4);//false    new一次在变量里有一个地址，另一个new一次有另一个地址

        //字面値 "abc"
        System.out.println(s1.equals(s4));//true   看字面值

        System.out.println(s1 == s5);//true   s5在常量池产生临时变量a，b，c，abc 所以指向的abc与s1的abc相等

        //s1 指向常量池  s6  由于+ 和字符串变量 参与 做了优化 StringBuilder(常).append(s)
        System.out.println(s6 == s1);//flase  jdk1.8版本会在拼接的时候new一下，s5的abc存在常量池里，s6的abc存在堆里，地址不同

        System.out.println(s7 == s1);//true   表示统一地址，将s6的地址也放入常量池中  相当于s7=abc=s1
        System.out.println(s7 == s8);//true

        // 维视
        //String s1 = "abc";
        String s9 = "a".concat("b").concat("c"); //concat 连接  new了一个新内存地址 所以s1!=s9
        System.out.println(s1 == s9);//flase


        String s10 = "def";
//        实例名{变量名称}.方法()
        System.out.println(s10.charAt(2));//f
        System.out.println("abcdefghijk".indexOf("str",7));//-1  查找字符串中从7开始有没有str

        System.out.println("abc".equalsIgnoreCase("ABC"));//true   不区分大小写
        System.out.println("abc".replace("b", "**"));//a**c   替换

        System.out.println("abcdefghijk".substring(3).indexOf("c"));//-1   从第四个以后有没有c

        // 定义
        // == equals intern

        // 常用方法看了

    }

}